home *** CD-ROM | disk | FTP | other *** search
/ Aminet 25 / Aminet 25 (1998)(GTI - Schatztruhe)[!][Jun 1998].iso / Aminet / mus / midi / CAMD_Toolkit.lha / PlayMF / PlayMF.doc < prev    next >
Text File  |  1998-04-13  |  8KB  |  248 lines

  1.  
  2.             --------------------------------------------------
  3.                PlayMF - a MIDI file player with XPK support
  4.             --------------------------------------------------
  5.  
  6.    Original Design and coding by Dan Baker, Commodore Business Machines.
  7.  
  8.             Modified and Bugfixed in 1998 by Christian Buchner
  9.  
  10.  
  11. This  is a MIDI file player that reads SMF (.MID) Files and sends them to a
  12. Midi port using the Commodore Amiga MIDI Library (camd.library).
  13.  
  14. The  original  playmf was part of an example package showing how to program
  15. CAMD  applications.   It lacked proper SysEx support and had a buggy timing
  16. routine.
  17.  
  18. I re-arranged the source code and rewrote most of the functions.
  19.  
  20. The  program  has  been  optimized  for  use with the Waveblaster Hack (see
  21. Aminet:    hard/hack/Waveblaster.lha).   Also  known  as  "Project  XG"  in
  22. England.   This is basically connecting a Wavetable soundcard to the serial
  23. port  of  your Amiga.  Try it!  it's easy and quite cheap.  What you get is
  24. excellent MIDI sound.
  25.  
  26.  
  27. Requirements
  28. ------------
  29.  
  30. * any MIDI synthesizer connected to your Amiga
  31.   (IMPORTANT: use GMPlay instead if you don't have any synthesizer!)
  32.  
  33. * OS 3.0 or better.
  34.  
  35. * 020  processor or better  (this program uses 64 bit instructions for very
  36.   exact timing calculations)
  37.  
  38. * installed camd.library (available on Aminet)
  39.  
  40. * installed realtime.library (part of Workbench 3.0 or 3.1 ?)
  41.  
  42.  
  43. Usage
  44. -----
  45.  
  46. This  program  can  be started from both Workbench and Shell.  When started
  47. from  Workbench  or  from  Shell without filename, the program opens an ASL
  48. requester and asks for any MIDI file.
  49.  
  50. The command template is "FILE,LINK/K,REPLACE/S,GM/S,GS/S,XG/S,MT32/S"
  51.  
  52. * FILE   (Argument, does not require the FILE keyword)
  53.  
  54. The  MIDI  file to play.  No wildcards, no multiple filenames (yet).  Loads
  55. standard  .MID files type 0 and 1.  May be packed with any (installed!) XPK
  56. sublibrary.    XPK   compressed   files   require   xpkmaster.library   for
  57. decompression.   New:   Specifying  a  directory name here will open an ASL
  58. filerequester with this directory as default.
  59.  
  60. * LINK/K   (Keyword)
  61.  
  62. Specify  the MIDI output cluster (link) to send the data to.  By specifying
  63. a non-existing cluster, you will create a new one.  The default is "out.0".
  64. This  is  usually  the  internal  serial port.  You can use the preferences
  65. program  "MidiPorts"  (which  is  part  of  the CAMD package) to define the
  66. connections  between  MIDI  hardware  and  cluster name.  Refer to the CAMD
  67. documentation for more information.
  68.  
  69. * REPLACE/S   (Switch)
  70.  
  71. Replace  the currently playing MIDI file (to the specified MIDI cluster) by
  72. the  selected  one.   This  will  send a CTRL-C (break signal) to the other
  73. PlayMF task.
  74.  
  75.  
  76. The  following  switches  will  probably  work with Yamaha synthesizers (XG
  77. compatible) only.  If you do not specify any of these switches, PlayMF will
  78. only  send  a  ResetAllControllers  message  on every channel and reset all
  79. programs to 0 (Grand Piano).
  80.  
  81. * GM/S   (Switch)
  82.  
  83. send a General MIDI initialisation.  Only 1 sample and 1 drum bank.  Strict
  84. General MIDI only.
  85.  
  86. * GS/S   (Switch)
  87.  
  88. Enable Roland GS compatibility (TG300B) mode of the XG synthesizer.  Should
  89. be  tried  first when listening to unknown MIDI files that are not known to
  90. be in XG format.  If problems occur, switch back to GM, then try MT32.
  91.  
  92. * XG/S   (Switch)
  93.  
  94. Reset  to  Yamaha XG mode, which is the default mode of any XG synthesizer.
  95. Use this switch if the XG MIDI file you want to play doesn't properly reset
  96. the  synthesizer.   Some  composers  forget  to  include  a XG reset at the
  97. beginning of their files.  Shame on them!
  98.  
  99. * MT32/S   (Switch)
  100.  
  101. Enable  Roland  MT32 synth emulation.  Use this if you have MIDI files that
  102. identify  themselves  as  MT32 files (e.g.  something32.MID) and sound ugly
  103. using the other initialisations.
  104.  
  105.  
  106.  
  107. General Tips
  108. ------------
  109.  
  110. There  can  be  multiple PlayMF tasks running playing different MIDI files.
  111. However each task must be sending to a different MIDI cluster (It would not
  112. make  any  sense to mix two different MIDI files to one MIDI cluster).  Use
  113. the REPLACE switch if you want to interrupt the currently playing MIDI file
  114. by calling another PlayMF.
  115.  
  116. When  started  from  Workbench,  the  REPLACE  option is on by default.  So
  117. selecting a MIDI file by ASL requester will interrupt any playing PlayMF.
  118.  
  119. The ASL requester allows MultiSelect and displays only MIDI files (also see
  120. Bugs).
  121.  
  122. When   PlayMF  has  been  started  from  Workbench,  it  cannot  be  easily
  123. interrupted.  You will have to use a task manager and send a break (CTRL-C)
  124. signal to it.
  125.  
  126. From the shell a simple CTRL-C interrupts the currently playing MIDI file.
  127.  
  128.  
  129.  
  130. Bugs
  131. ----
  132.  
  133. well, seems to work fine, except...
  134.  
  135. *  The  ASL  filerequester  of  PlayMF  uses  callback  hooks  for filetype
  136. recognition.   The Mui-ASL replacement has not implemented this, so it will
  137. show _NO_ files at all!  Ask the author to fix this (or at least show _all_
  138. files).
  139.  
  140.  
  141. History
  142. -------
  143.  
  144. Release 1: initial release on Aminet, about Feb 25th 1998, 21h 
  145.  
  146. Release 2: First bugfix three hours later:
  147.            The tracks of (only a few) midifiles used to get out of
  148.            sync. Found the bug in the routine that skipped unused
  149.            events. This one already existed in the original playmf.
  150.            So not my fault, really ;-)
  151.  
  152.            Added ASL filerequester code by cdtv. Thanks, man!
  153.  
  154.            Added Workbench startup code.
  155.  
  156.            Added Link keyword (MIDI cluster specification) and
  157.            the detection of another PlayMF task sending to the
  158.            same Link.
  159.  
  160.            Added REPLACE switch. See above.
  161.  
  162.            Passing a directory name as FILE argument will open
  163.            the ASL requester with that default directory.
  164.  
  165. Release 3: added the fireworks to the distribution
  166.  
  167. Release 4: speeded up the BOOPSI classes and the fireworks
  168.  
  169.            PlayMF now sends an All Notes Off *and* All Sounds Off
  170.            channel mode message upon termination. This should fix
  171.            all cases hanging notes (especially those held by
  172.            sostenuto pedal)
  173.  
  174. Bugfixed
  175. Release 4: argh, sending AllSoundsOff didn't work. Fixed.
  176.  
  177. Release 5: Improved Fireworks tool a lot. Can now even control
  178.            PlayMF.
  179.  
  180. Release 6: again loaded Fireworks tool with new features. Seems
  181.            to be my favourite toy now.
  182.  
  183. Release 7: if no GM, GS or XG init is specified, PlayMF will
  184.            send a ResetAllControllers message on every channel
  185.            and reset all programs to 0 (Grand Piano).
  186.  
  187.  
  188. Future
  189. ------
  190.  
  191. * pattern matching, mutiple file names
  192.  
  193. * add ability to directly play from .zip files (e.g. from the Internet)
  194.  
  195. * WB App Icon
  196.  
  197. * implement a GUI.  Will be object oriented and use the "Betty" BOOPSI GUI
  198.   system. See http://www.cs.utah.edu/~stack/betty/
  199.  
  200. * create a midi.datatype and doin' better than Martin Gierich ;-)
  201.  
  202. * create a GMPlay version that hooks into camd.library
  203.  
  204.  
  205. See Also
  206. --------
  207.  
  208. PianoMeter  -  an  experimental  graphical note visualisation utility using
  209. BOOPSI  classes.   Try  it!   It  is  a real eyecandy ;-) Based on the "vu"
  210. example in the CAMD developer package.
  211.  
  212. "Fireworks"  from  this  distribution  -  a  thrilling MIDI fireworks tool.
  213. Makes your music explode. Amazingly fast with Picasso 96.
  214.  
  215. GMPlay  1.3 - available on Aminet.  Uses your CPU to play MIDI music.  Does
  216. not require any MIDI synthesizer, but lots of CPU power and RAM.
  217.  
  218.  
  219. Contact
  220. -------
  221.  
  222. for comments, bug reports and suggestions:
  223.  
  224. The author: Christian Buchner
  225.  
  226.             flowerp@eikon.e-technik.tu-muenchen.de
  227.  
  228.  
  229. Greetings
  230. ---------
  231.  
  232. Rafai Mantiuk - for the BCC precompiler that allows to programm
  233.                 MUI/BOOPSI classes with C++ syntax.
  234.  
  235. Tim Stack     - for his excellent Betty GUI system. This really
  236.                 deserves more public attention. My future application
  237.                 programs will be based on Betty. 
  238.                 see http://www.cs.utah.edu/~stack/betty.html
  239.  
  240. CDTV (Tino    - for organizing the cool computer meetings in Erfurt
  241. Wildenhain)     and for testing PlayMF and PianoMeter and for his
  242.                 suggestions
  243.  
  244. Martin Gierich- for his midi.datatype which is based on the original
  245.                 "playmf" as well. However it is not reentrant and
  246.                 will crash when loading the second MIDI file.
  247.                 Hey, have a look at my playmf source code! ;-)
  248.